package shark.picture.utils.other;

import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * @author jianxin.wei
 * @description 文件本地处理
 * @date 2025/9/3 16:42
 */
public class FileDebugLauncher {
    public static void main(String[] args) throws Exception {


        XWPFDocument xwpfDocument = new XWPFDocument(Files.newInputStream(Paths.get("E:\\shark\\需求文档\\2025-08-27 直通车\\送电单3.docx")));
        // 在第5行后插入2行（索引从0开始 → 4 表示第5行）
//        insertRowsWithStyle(table, 7, 2);
//        List<String> list = new ArrayList<>();
//        for (int i = 0; i < 100; i++) {
//            list.add("哈哈");
//        }
//        xwpfDocument.getTables().get(0).getRows().stream()
//                .flatMap(r -> r.getTableCells().stream())
//                .flatMap(c -> c.getParagraphs().stream())
//                .flatMap(p -> p.getRuns().stream())
////                .map(run -> run.getText(0))
////                .forEach(System.out::println);
//                .filter(run -> "{image}".equals(run.getText(0)))
//                .forEach(run -> {
//                    System.out.println(run.getText(0));
//                    run.setText("", 0);
//                });
        InputStream inputImageStream = Files.newInputStream(Paths.get("E:\\shark\\需求文档\\2025-08-27 直通车\\t.png"));
        xwpfDocument.getTables().get(0).getRows().stream()
                .flatMap(r -> r.getTableCells().stream())
                .flatMap(c -> c.getParagraphs().stream())
                .flatMap(p -> p.getRuns().stream())
                .filter(run -> "{image}".equals(run.getText(0)))
                .forEach(run -> {
                    try {
                        run.setText("", 0);
                        run.setTextPosition(-5);
                        run.addPicture(inputImageStream, XWPFDocument.PICTURE_TYPE_PNG, "签字图片.png", Units.toEMU(60), Units.toEMU(18));
                    } catch (Exception e) {
                        throw new RuntimeException("插入签字图片失败",e);
                    }
                });
        xwpfDocument.write(Files.newOutputStream(Paths.get("E:\\shark\\需求文档\\2025-08-27 直通车\\送电单-签字.docx")));
        xwpfDocument.close();
    }


    /**
     * 在指定行下插入若干行，保持原行的样式（包括行高、单元格样式等）
     *
     * @param table        表格对象
     * @param baseRowIndex 基准行号（0-based）
     * @param insertCount  插入的行数
     */
    public static void insertRowsWithStyle(XWPFTable table, int baseRowIndex, int insertCount) {
        XWPFTableRow baseRow = table.getRow(baseRowIndex);

        for (int j = 0; j < insertCount; j++) {
            // 在指定位置插入新行
            XWPFTableRow newRow = table.insertNewTableRow(baseRowIndex + 1 + j);

            // 复制整行属性（包含行高等信息）
            CTRow ctRow = (CTRow) baseRow.getCtRow().copy();
            newRow.getCtRow().set(ctRow);

        }

    }

}
